home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / glibc108.zip / glibc108 / sysdeps / unix / bsd / hp / m68k / __vfork.S < prev    next >
Encoding:
Text File  |  1991-06-26  |  1.6 KB  |  53 lines

  1. /* Copyright (C) 1991 Free Software Foundation, Inc.
  2. This file is part of the GNU C Library.
  3.  
  4. The GNU C Library is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU Library General Public License as
  6. published by the Free Software Foundation; either version 2 of the
  7. License, or (at your option) any later version.
  8.  
  9. The GNU C Library is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12. Library General Public License for more details.
  13.  
  14. You should have received a copy of the GNU Library General Public
  15. License along with the GNU C Library; see the file COPYING.LIB.  If
  16. not, write to the Free Software Foundation, Inc., 675 Mass Ave,
  17. Cambridge, MA 02139, USA.  */
  18.  
  19. #include <sysdep.h>
  20.  
  21. #ifndef    SYS_vfork
  22. #define    SYS_vfork    66
  23. #endif
  24.  
  25. /* Clone the calling process, but without copying the whole address space.
  26.    The the calling process is suspended until the the new process exits or is
  27.    replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
  28.    and the process ID of the new process to the old process.  */
  29. .globl ___vfork
  30. ___vfork:
  31.     /* Pop the return PC value into A0.  */
  32.     moveal sp@+, a0
  33.  
  34.     /* Stuff the syscall number in D0 and trap into the kernel.  */
  35.     movel #SYS_vfork, d0
  36.     trap #0
  37.     bcs error        /* Branch forward if it failed.  */
  38.  
  39.     /* It succeeded.  See which fork we're in.  */
  40.     tstl d1            /* If D1 is zero, we're the parent.  */
  41.     beq parent
  42.  
  43.     /* We're the child.  Clear D0.  */
  44.     clrl d0
  45.  
  46.     /* Jump to the return PC.  */
  47. parent:    jmp a0@
  48.  
  49. error:
  50.     movel d0, _errno
  51.     moveq #-1, d0
  52.     jmp a0@
  53.